package com.server.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.server.authority.Login;
import com.server.common.base.ProjectInfor;
import com.server.common.base.SessionData;
import com.server.service.IPapersPackagingService;
import com.server.service.ITestQuestionsManageService;
import com.server.web.DataVector;
import com.server.web.JSONSerielizer;
import com.server.web.OutputUtil;
import com.server.web.RequestInput;
import com.server.web.SessionUtil;

/** 
 * 试卷组装
 * @author wufeng
 * @date 创建时间：2016年7月20日 上午11:32:17 
 */
@Controller
@RequestMapping("testPaper")
public class PapersPackagingController {
	@Autowired 
	private IPapersPackagingService paperPackagingService;
	@Autowired 
	private ITestQuestionsManageService testQuestionsManageService;
    /**
    * 试卷列表页面
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月12日 上午9:32:14 
    * @return  
    */
	@Login
    @RequestMapping("")
    public ModelAndView paperMv(){
    	ModelAndView mv = new ModelAndView("testQuestions/testPaperList");
    	mv.addObject("rootPath", ProjectInfor.ROOT_PATH);
    	return mv;
    }
    /**
    * 试卷列表数据
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月13日 下午3:44:24 
    * @return  
    */
    @RequestMapping("listData/{state}")
    public void getList(HttpServletRequest request,
    		HttpServletResponse response,@PathVariable Integer state){
		String user = SessionUtil.getStringAttri(request, SessionData.nameKey_mng);
		String userType = SessionUtil.getStringAttri(request, SessionData.levelKey_mng);
    	DataVector<Map<String, Object>> listData =  paperPackagingService.getList(userType,state, user, new RequestInput(request));
		OutputUtil.returnGridData(response, listData.getCount(),
				JSONSerielizer.toJson(listData.getList(),null,null));
    }
    
    /**
    * 新增试卷
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月15日 上午10:06:47 
    * @return  
    */
    @RequestMapping("addMv")
    public ModelAndView addMv(){
    	ModelAndView mv = new ModelAndView("testQuestions/addNewTestPaper");
    	mv.addObject("rootPath", ProjectInfor.ROOT_PATH);
    	return mv;
    }
    /**
    * 修改页面
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月15日 下午4:42:43 
    * @return  
    */
    @RequestMapping("updateMv/{paperId}")
    public ModelAndView updateMv(@PathVariable Integer paperId){
    	ModelAndView mv = new ModelAndView("testQuestions/updateTestPaper");
    	mv.addObject("rootPath", ProjectInfor.ROOT_PATH);
    	mv.addObject("paperId", paperId);
    	return mv;
    }
    /**
    * 试卷组装页面
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月15日 上午11:46:33 
    * @return  
    */
    @RequestMapping("packages/{grading_way}/{paperId}")
    public ModelAndView examMakeMv(@PathVariable String grading_way,@PathVariable Integer paperId){
    	ModelAndView mv = new ModelAndView("testQuestions/updateExamMake");
    	mv.addObject("rootPath", ProjectInfor.ROOT_PATH);
    	mv.addObject("paperId", paperId);
    	mv.addObject("grading_way", grading_way);
    	return mv;
    }
    /**
     * 试卷组装页面 修改
     * @author  作者 : wufeng
     * @date 创建时间：2016年8月15日 上午11:46:33 
     * @return  
     */
    @RequestMapping("packages_r/{grading_way}/{paperId}")
    public ModelAndView packagesMv(@PathVariable String grading_way,@PathVariable Integer paperId){
    	ModelAndView mv = new ModelAndView("testQuestions/updateExamMake");
    	mv.addObject("rootPath", ProjectInfor.ROOT_PATH);
    	mv.addObject("paperId", paperId);
    	mv.addObject("grading_way", grading_way);
    	return mv;
    }
    
    /**
    * 新增试卷数据 
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月15日 下午4:46:45 
    * @return  
    */
    @RequestMapping("add")
    public void add(HttpServletRequest request, HttpServletResponse response){
    	String json = request.getParameter("data");
    	String user = SessionUtil.getStringAttri(request, SessionData.nameKey_mng);
    	Map<String, Object> map = JSONSerielizer.toMap(json);
    	Map<String, Object> reMap =  paperPackagingService.add(map, user);
    	String jsonMap = JSONSerielizer.toJson(reMap, null, null);
    	OutputUtil.returnString(response, jsonMap);
    	
    }
    /**
    * 修改试卷数据
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月15日 下午4:48:14 
    * @return  
    */
    @RequestMapping("update/{paperId}")
    public void update(HttpServletRequest request, 
    		HttpServletResponse response, @PathVariable Integer paperId){
    	String json = request.getParameter("data");
    	String user = SessionUtil.getStringAttri(request, SessionData.nameKey_mng);
    	Map<String, Object> map = JSONSerielizer.toMap(json);
    	boolean isSuccess =  paperPackagingService.update(paperId.toString(), map, user);
    	OutputUtil.returnSuccess(response, isSuccess);
    }
    
    /**
    * 修改试卷中每个类型的分值及试卷的合格成绩
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月17日 上午10:49:16 
    * @return  
    */
    @RequestMapping("updateTest/{paperId}")
    public void updateTest(HttpServletRequest request, 
    		HttpServletResponse response, @PathVariable String paperId){
    	String json = request.getParameter("data");
    	String user = SessionUtil.getStringAttri(request, SessionData.nameKey_mng);
    	Map<String, Object> map = JSONSerielizer.toMap(json);
    	boolean isSuccess =  paperPackagingService.update(paperId, map, user);
    	OutputUtil.returnSuccess(response, isSuccess);
    }
    
    /**
    * 获取试卷数据
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月15日 下午5:00:48 
    * @return  
    */
    @RequestMapping("mapData/{paperId}")
    public void getMapData(HttpServletRequest request,
    		HttpServletResponse response, @PathVariable Integer paperId){
    	Map<String, Object> map = paperPackagingService.getMap(paperId.toString());
    	String jsonString = JSONSerielizer.toJson(map, null, null);
    	OutputUtil.returnString(response, jsonString);
    }
    /**
    * 向试卷中添加试题
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月17日 下午9:25:58 
    * @return  
    */
    @RequestMapping("addTest/{paperId}")
    public void addTest(HttpServletRequest request, HttpServletResponse response,
    		@PathVariable String paperId){
    	boolean isSuccess = true;
    	String user = SessionUtil.getStringAttri(request, SessionData.nameKey_mng);
    	String ids = request.getParameter("data");
    	String []id = ids.split(",");
    	for (String string : id) {
    		Map<String, Object> map = testQuestionsManageService.getMap(string);
    		Object object = map.get("class_id");
    		if(!StringUtils.isEmpty(object)){
    			isSuccess = paperPackagingService.addTestQuestions(paperId,string, object.toString(),user);
    		}
		}
    	OutputUtil.returnSuccess(response, isSuccess);
    }
    @RequestMapping("updatePaperTest/{paperId}")
    public void updatePaperTest(HttpServletRequest request, HttpServletResponse response,
    		@PathVariable String paperId){
    	boolean isSuccess = true;
    	String user = SessionUtil.getStringAttri(request, SessionData.nameKey_mng);
    	String ids = request.getParameter("data");
    	boolean success = true;
    	List<Map<String, Object>> list = paperPackagingService.list(paperId);
    	for (Map<String, Object> map : list) {
    		Object object = map.get("exam_res_id");
    		if(!StringUtils.isEmpty(object)){
    			int pos = ids.indexOf(object.toString());
    			if(pos < 0){
    				success = paperPackagingService.deleteTest(paperId,object.toString());
    			}else if(pos == 0){
    				if(ids.contains(",")){
    					ids = ids.replace(object.toString()+",", "");
    				}else {
    					ids = ids.replace(object.toString(), "");
					}
    			}else{
    				ids = ids.replace(","+object.toString(), "");
    			}
    		}
		}
    	if(ids == null||ids.length() <= 0){
    		OutputUtil.returnSuccess(response, isSuccess);
    	}else{
    		String id[] = ids.split(",");
    		for (String string : id) {
    			Map<String, Object> map = testQuestionsManageService.getMap(string);
    			Object object = map.get("class_id");
    			if(!StringUtils.isEmpty(object)&&success){
    				isSuccess = paperPackagingService.addTestQuestions(paperId,string, object.toString(),user);
    			}
    		}
    		OutputUtil.returnSuccess(response, isSuccess);
    	}
    }
    
    /**
    * 试卷设置
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月15日 下午5:36:48 
    * @return  
    */
    @RequestMapping("paperSetup/{paperId}")
    public ModelAndView paperSetupMv(@PathVariable Integer paperId){
    	ModelAndView mv = new ModelAndView("testQuestions/settingPaper");
    	mv.addObject("rootPath", ProjectInfor.ROOT_PATH);
    	mv.addObject("paperId", paperId);
    	return mv;
    }
    
    
    /**
    * 删除试卷
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月15日 下午5:37:02 
    * @return  
    */
    @RequestMapping("delete")
	public void delete(HttpServletRequest request,
			HttpServletResponse response){
		boolean isSuccess = true;
		boolean isRight = true;
		String user = SessionUtil.getStringAttri(request, SessionData.nameKey_mng);
		String userType = SessionUtil.getStringAttri(request, SessionData.levelKey_mng);
		String str = request.getParameter("data");
		String []id = str.split(",");
		Map<String, Object> map = new HashMap<String, Object>();
		if(userType.equals("1")){
			for (String string : id) {
					isSuccess = paperPackagingService.delete(string);
			}
		}else {
			for (String string : id) {
				if(paperPackagingService.isRight(string, user)){
					isSuccess = paperPackagingService.delete(string);
				}else {
					isRight = false;
				}
			}
		}
		map.put("isSuccess", isSuccess);
		map.put("isRight", isRight);
		String mapJson = JSONSerielizer.toJson(map, null, null); 
		OutputUtil.returnString(response, mapJson);
	}
    
    /**
    * 选择试题页面
    * @author  作者 : wufeng
    * @date 创建时间：2016年8月16日 下午3:31:00 
    * @return  
    */
    @RequestMapping("questionListMv/{type}")
    public ModelAndView questionListMv(@PathVariable String type){
    	ModelAndView mv = new ModelAndView("testQuestions/selectList");
    	mv.addObject("rootPath", ProjectInfor.ROOT_PATH);
    	mv.addObject("type", type);
    	return mv;
    }
	/**
	* 选择试题列表数据
	* @author  作者 : wufeng
	* @date 创建时间：2016年8月15日 下午10:21:48 
	* @return  
	*/
	@RequestMapping("questionList/{type}")
	public void questionList(HttpServletRequest request, 
			HttpServletResponse response,@PathVariable String type){
		DataVector<Map<String, Object>> listData = paperPackagingService.getQuetionsList(type, new RequestInput(request));
		OutputUtil.returnGridData(response, listData.getCount(),JSONSerielizer.toJson(listData.getList(),null,null));
	}
	/**
	* 试题具体信息
	* @author  作者 : wufeng
	* @date 创建时间：2016年8月16日 下午3:32:22 
	* @return  
	*/
	@RequestMapping("questionListData")
	public void questionListData(HttpServletRequest request, 
			HttpServletResponse response){
		String id = request.getParameter("data");
		String arr[] = id.split(",");
		List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
		for (String string : arr) {
			Map<String, Object> map = testQuestionsManageService.getMap(string);
			list.add(map);
		}
		String json = JSONSerielizer.toJson(list, null, null);
		OutputUtil.returnString(response, json);
	}
	/**
	* 试卷信息
	* @author  作者 : wufeng
	* @date 创建时间：2016年8月17日 上午9:58:13 
	* @return  
	*/
	@RequestMapping("paperInfo/{paperId}")
	public void paperInfo(HttpServletRequest request, 
			HttpServletResponse response,@PathVariable String paperId){
		Map<String, Object> map = paperPackagingService.paperMap(paperId);
    	String jsonString = JSONSerielizer.toJson(map, null, null);
    	OutputUtil.returnString(response, jsonString);
	}
	
	/**
	* 继续编制试卷页面
	* @author  作者 : wufeng
	* @date 创建时间：2016年8月17日 下午3:07:37 
	* @return  
	*/
	@RequestMapping("makeMv/{paperId}")
	public ModelAndView makeMv(@PathVariable String paperId){
		ModelAndView mv = new ModelAndView("testQuestions/updateTestPaper");
    	mv.addObject("rootPath", ProjectInfor.ROOT_PATH);
    	mv.addObject("paperId", paperId);
    	return mv;
		
	}
	
	/**
	* 试题ID列表
	* @author  作者 : wufeng
	* @date 创建时间：2016年8月17日 下午4:59:17 
	* @return  
	*/
	@RequestMapping("testList/{paperId}")
	public void testList(HttpServletRequest request, 
			HttpServletResponse response,@PathVariable String paperId){
		List<Map<String, Object>> list = paperPackagingService.getQuestionIdList(paperId);
		String reStr="";
		for (Map<String, Object> map : list) {
			Object obj = map.get("exam_res_id");
			if(!StringUtils.isEmpty(obj)){
				if(reStr == ""){
					reStr = obj.toString();
				}else{
					reStr +="," + obj.toString();
				}
			}
		}
		String json = JSONSerielizer.toJson(reStr, null, null);
		OutputUtil.returnString(response, json);
	}
	
	/**
	* 提交评估
	* @author  作者 : wufeng
	* @date 创建时间：2016年8月17日 下午9:27:20 
	* @return  
	*/
	@RequestMapping("submit")
	public void submit(HttpServletRequest request, 
			HttpServletResponse response){
		String str = request.getParameter("data");
		String user = SessionUtil.getStringAttri(request, SessionData.nameKey_mng);
		boolean isSuccess = true;
		Integer estimate = paperPackagingService.toEstimate(str, user);
		isSuccess = estimate > 0;
		OutputUtil.returnSuccess(response, isSuccess);
		
	}
	
	/**
	* 查看试卷
	* @author  作者 : wufeng
	* @date 创建时间：2016年8月17日 下午9:30:21 
	* @return  
	*/
	@RequestMapping("checkMv/{paperId}")
	public ModelAndView check(@PathVariable String paperId){
		ModelAndView mv = new ModelAndView("testQuestions/paperInfo");
    	mv.addObject("rootPath", ProjectInfor.ROOT_PATH);
    	mv.addObject("paperId", paperId);
    	return mv;
	}
}
